Information is at the heart of computer applications. Information refers to data emanating from various sources including storage devices, Web resources, application data, instant messages, emails, dynamic objects, etc. Enterprise information virtualization (EIV) allows applications to use information from a variety of sources. An EIV server evaluates requests for information from an information requestor, optimizes and sends queries for the requested information to individual data sources, and delivers and reports query results to the information requestor. The EIV server may also run a custom application and publish the query results on a Web service.
Information can be of two types, non-addressable and addressable. Non-addressable information is transient or ephemeral information that is alive for a short period of time. For example, information that flows through a pipe or a socket is typically gone after the application consumes the information. More importantly, non-addressable information cannot be directly accessed by other applications, hence is termed non-addressable. Addressable information is persistent or perennial information that has a permanent source, location, and storage. Using the address given to the addressable information, such as a pathname, a uniform resource identifier (URL), or a key (in the case of PCO), addressable information can be accessed by an application from another computer provided the computer and the application have the connectivity and permission to access the information. Typical examples of addressable information are files and documents that are stored on hard disks, network attached storages, on Websites, dynamic objects (e.g., PCOs), etc.
Coherency of information is important when caching information to achieve a good performance. Management of information coherency is in many ways akin to cache coherency management in processors. The underlying coherency management for either information management or cache coherency management should account for the followings. First, the unit of coherency is pre-determined. The unit of coherency is usually a block of a convenient size (e.g., one memory page). When multiple computers or applications cache the same information, the coherency protocol ensures that a block of information can at most be modified by one process or one computer at a time. Second, when a process (or computer) intends to write to a block, the process (or computer) first acquires a lock, reads the latest version of the information block from a backing store, and notifies all other processes (or computers) to invalidate the block from their caches. In cache coherency protocols, this process is referred to as read for ownership (RFO). An example of cache coherency protocols is MESI protocol. As long as a process (or computer) holds a RFO lock on a block, the process (or computer) is allowed to write to the block (also referred to as dirty writes). Subsequently, when another process (or computer) requests to read the same block, a cache manager requests the process (or computer) that holds the RFO lock to flush the block to the backing store, and release the RFO lock. Then, the cache manager enables the requesting process to acquire the RFO lock, and cache the block of information for its use.
Hardware abstraction is usually implemented by virtual machines (VMs). A hypervisor or a virtual machine manager (VMM) creates VMs on a host computer after a guest operating system (OS) starts. The hardware abstraction by the hypervisor or VMM enforces isolation among different VMs. Traditionally, the hardware abstraction slows down virtual I/O operations. Although the physical hardware may have powerful components such as a graphics processing unit (GPU) that is capable of hardware acceleration for 3D graphics and animation, the VM may indicate to the guest OS that the hardware has only a VGA-capable graphics device. Resultantly, an application on the guest OS may to resort to software rendering instead of hardware acceleration that the GPU is capable of drawing and rotating a 3D object. Software rendering takes hundreds of instructions to complete a task that the GPU can complete in a handful of instructions. In addition, the isolation by the hardware abstraction forces data to be copied across multiple hops while performing virtual I/O operations.